/**
 * 文件功能：API配置管理
 * 作者：开发者
 * 日期：2024年
 * 描述：管理不同环境下的API配置信息
 */

/**
 * API配置类
 * @description 管理不同环境的API配置
 */
class ApiConfig {
  /**
   * 获取当前环境
   * @returns {string} 当前环境名称
   */
  static getEnv() {
    return process.env.NODE_ENV || 'development';
  }

  /**
   * 环境配置映射
   */
  static envConfig = {
    // 开发环境 - 直接使用真实后端地址，避免跨域代理复杂性
    development: {
      baseURL: 'http://81.71.152.197:8080',
      timeout: 20000,
      withCredentials: false,
    },
    // 测试环境
    test: {
      baseURL: 'https://test-api.example.com/api',
      timeout: 15000,
      withCredentials: true,
    },
    // 生产环境
    production: {
      baseURL: 'https://bill-icbc.creavidia.com',
      timeout: 20000,
      withCredentials: true,
    },
  };

  /**
   * 获取当前环境配置
   * @returns {Object} 当前环境的配置对象
   */
  static getCurrentConfig() {
    const env = this.getEnv();
    return this.envConfig[env] || this.envConfig.development;
  }

  /**
   * 获取基础URL
   * @returns {string} 基础API地址
   */
  static getBaseURL() {
    return process.env.REACT_APP_API_BASE_URL || this.getCurrentConfig().baseURL;
  }

  /**
   * 获取超时时间
   * @returns {number} 超时时间（毫秒）
   */
  static getTimeout() {
    return this.getCurrentConfig().timeout;
  }

  /**
   * 是否携带凭证
   * @returns {boolean} 是否携带凭证
   */
  static getWithCredentials() {
    return this.getCurrentConfig().withCredentials;
  }

  /**
   * API状态码映射
   */
  static statusCode = {
    SUCCESS: 200,
    UNAUTHORIZED: 401,
    FORBIDDEN: 403,
    NOT_FOUND: 404,
    SERVER_ERROR: 500,
  };

  /**
   * 错误消息映射
   */
  static errorMessages = {
    NETWORK_ERROR: '网络连接异常，请检查网络设置',
    TIMEOUT_ERROR: '请求超时，请稍后重试',
    SERVER_ERROR: '服务器错误，请稍后重试',
    UNAUTHORIZED: '登录已过期，请重新登录',
    FORBIDDEN: '没有权限访问该资源',
    NOT_FOUND: '请求的资源不存在',
    UNKNOWN_ERROR: '未知错误，请稍后重试',
  };
}

export default ApiConfig;